From b672b7a5c4860904a464f06cf23dde59cc8d4fd9 Mon Sep 17 00:00:00 2001 From: Tim Deegan Date: Tue, 8 May 2007 10:32:05 +0100 Subject: [PATCH] [HVM] Fix shadow remove-write-access heuristic for 64bit w2k3 linear map. Signed-off-by: Tim Deegan --- xen/arch/x86/mm/shadow/common.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 2f5c7ba557..a4598e4bc2 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1764,12 +1764,15 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, #if CONFIG_PAGING_LEVELS >= 4 else if ( v->arch.paging.mode->guest_levels == 4 ) { - /* 64bit w2k3: linear map at 0x0000070000000000 */ + /* 64bit w2k3: linear map at 0xfffff68000000000 */ switch ( level ) { - case 1: GUESS(0x70000000000UL + (fault_addr >> 9), 3); break; - case 2: GUESS(0x70380000000UL + (fault_addr >> 18), 3); break; - case 3: GUESS(0x70381C00000UL + (fault_addr >> 27), 3); break; + case 1: GUESS(0xfffff68000000000UL + + ((fault_addr & VADDR_MASK) >> 9), 3); break; + case 2: GUESS(0xfffff6fb40000000UL + + ((fault_addr & VADDR_MASK) >> 18), 3); break; + case 3: GUESS(0xfffff6fb7da00000UL + + ((fault_addr & VADDR_MASK) >> 27), 3); break; } /* 64bit Linux direct map at 0xffff810000000000; older kernels -- 2.30.2